package cn.lkk.samples.apis.reflection;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Scanner;

/**
 * 演示 java.lang.reflect.Array 类的使用。
 * Array 类提供了动态创建和访问 Java 数组的方法。
 */
public class ArrayApi {
    public static void main(String[] args) {
        getLength();
    }

    /**
     * Array.newInstance 方法，该方法用于动态创建数组
     */
    public static void newInstance() {
        int len;
        System.out.println("请输入数组的长度");
        Scanner in = new Scanner(System.in);
        len = in.nextInt();

        //动态的创建数组
        Object dynamicArray = Array.newInstance(int.class, len);
        int[] ints = (int[]) dynamicArray;
        Arrays.fill(ints, 2);
        System.out.println(Arrays.toString(ints));
    }

    /**
     * 1. Array.get 用于获得数组元素
     * 2. Array.set 用于设置数组元素
     */
    public static void getAndSet() {
        int[] ints = new int[10];
        Arrays.fill(ints, 1);

        int index = 4;
        //get值
        int value = Array.getInt(ints, index);
        //set值
        Array.set(ints, index, 5);

        System.out.println(value);
        System.out.println(Arrays.toString(ints));
    }

    /**
     * Array.getLength 获取数组长度
     */
    public static void getLength() {
        int[] array = {2, 3, 2, 4, 2, 4, 8};
        int len = Array.getLength(array);
        System.out.println(len);
    }
}
